package org.wanho;

/**
 * Author：汤小洋
 * Date：2023-05-09 15:05
 * Description：<描述>
 */
public class Test13_位运算符 {

    public static void main(String[] args) {
        int a = 5; // 00000000 000000000 00000000 00000101
        int b = 8; // 00000000 000000000 00000000 00001000
        // 与：两位都为1，则为1，否则为0
        System.out.println(a & b); // 0
        // 或：只要有一个为1，则为1，否则为0
        System.out.println(a | b); // 1101，结果为13

        // 非：如果为1，则为0；如果为0，则为1
        /**
         * 补码 111111111 11111111 11111111 11111010
         * 反码 111111111 11111111 11111111 11111001
         * 原码 10000000 000000000 00000000 00000110
         */
        System.out.println(~a);

        // 异或：如果两位相同，则为0，否则为1
        System.out.println(a ^ b); // 1101，结果为13
        int c = a ^ b;
        System.out.println(c ^ b);

        // 左移<<：将二进制的所有位都左移指定的位数，末尾补0
        System.out.println(a << 2);
        // 右移>>：将二进制的所有位都右移指定的位数，高位补符号位
        System.out.println(a >> 2);

        int d = 0b11111111111111111111111111111010;
        System.out.println(d);
        System.out.println(d >> 2);

        // 无符号右移>>>：将二进制的所有位都右移指定的位数，高位补0
        System.out.println(d >>> 2);


    }
}
